<?php

    namespace yaliSDK\live;

    use think\Exception;
    use wx\TLSSigAPI;
    use yaliSDK\common\BaseService;

    class LiveService extends BaseService {
        static $pro;
        static $benfor;
        public static function getConfig($version) {
            if (empty(self::$pro)) {
                // 正式，https://gm.yalicloud.com
                self::$pro = [
                    'IM_SDKAPPID' => 1256711160,
                    'IM_ACCOUNTTYPE' => '27665',

                    // 云通信 管理员账号
                    'IM_ADMINISTRATOR' => 'zbadmin',
                    /**
                     *  云通信 派发usersig 采用非对称加密算法RSA，用私钥生成签名。privateKey就是用于生成签名的私钥，私钥文件可以在互动直播控制台获取
                     *  配置privateKey
                     *  将private_key文件的内容按下面的方式填写到 privateKey字段。
                     */
                    'PRIVATEKEY' => "-----BEGIN PRIVATE KEY-----\r\n" .
                        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmRKNlJ+XYLEynDWW\r\n" .
                        "lST0tixvRRz/cdYJvoNcsrsRMn6hRANCAAQcHLumpUVVBOYwdmtgzFU9gus3Qxy2\r\n" .
                        "MuGu+Gd+sqpiY1d/TVYC85R5vn0hiZ1POFTczcSIoU3D3gU3szDZbe51\r\n" .
                        "-----END PRIVATE KEY-----\r\n",
                    'PUBLICKEY' => "-----BEGIN PRIVATE KEY-----\r\n" .
                        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHBy7pqVFVQTmMHZrYMxVPYLrN0Mc\r\n" .
                        "tjLhrvhnfrKqYmNXf01WAvOUeb59IYmdTzhU3M3EiKFNw94FN7Mw2W3udQ==\r\n" .
                        "-----END PUBLIC KEY-----\r\n",
                ];
                self::$benfor = [
                    /**
                     *  云通信 IM_SDKAPPID: IM_ACCOUNTTYPE 和 PRIVATEKEY 是云通信独立模式下，为您的独立账号 identifer，
                     *  派发访问云通信服务的userSig票据的重要信息，填写错误会导致IM登录失败，IM功能不可用
                     *
                     * 需要开通云通信服务
                     * 参考指引 @https://cloud.tencent.com/document/product/454/7953#3.-.E4.BA.91.E9.80.9A.E8.AE.AF.E6.9C.8D.E5.8A.A1.EF.BC.88im.EF.BC.89
                     * 有介绍appid 和 accType的获取方法。以及私钥文件的下载方法。
                     */
                    'IM_SDKAPPID' => 1400084586,
                    /**
                     *  云通信 账号集成类型 IM_ACCOUNTTYPE: IM_SDKAPPID 和 PRIVATEKEY 是云通信独立模式下，为您的独立账户identifer，
                     *  派发访问云通信服务的userSig票据的重要信息，填写错误会导致IM登录失败，IM功能不可用
                     */
                    'IM_ACCOUNTTYPE' => '25489',

                    // 云通信 管理员账号
                    'IM_ADMINISTRATOR' => 'zbadmin',
                    /**
                     *  云通信 派发usersig 采用非对称加密算法RSA，用私钥生成签名。privateKey就是用于生成签名的私钥，私钥文件可以在互动直播控制台获取
                     *  配置privateKey
                     *  将private_key文件的内容按下面的方式填写到 privateKey字段。
                     */
                    'PRIVATEKEY' => "-----BEGIN PRIVATE KEY-----\r\n" .
                        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgsaobmsJVuKeVRvq6\r\n" .
                        "ryvxBo6GRYrJsvt+ambToiRVNc6hRANCAATqlPVzt4DiFbPTciAmnRhz17f31Ay7\r\n" .
                        "Bb/1h/UvuFRiJLo9NemadDWivBgoQjaZqQ+54AwVkGjcct7Oky6BYaia\r\n" .
                        "-----END PRIVATE KEY-----\r\n",
                    'PUBLICKEY' => "-----BEGIN PUBLIC KEY-----\r\n" .
                        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6pT1c7eA4hWz03IgJp0Yc9e399QM\r\n" .
                        "uwW/9Yf1L7hUYiS6PTXpmnQ1orwYKEI2makPueAMFZBo3HLezpMugWGomg==\r\n" .
                        "-----END PUBLIC KEY-----\r\n",
                ];
            }
            if ($version === 'pro') {
                return self::$pro;
            } else {
                return self::$benfor;
            }
        }

        public static function getLiveRet($version, $id) {
            $config = self::getConfig($version);
            $ret = null;
            try {
                $d = new TLSSigAPI();
                $d->setAccountType($config['IM_ACCOUNTTYPE']);
                $d->setAppid($config['IM_SDKAPPID']);
                $d->setPrivateKey($config['PRIVATEKEY']);
                $d->setPublicKey($config['PUBLICKEY']);
                $sign = $d->genSig($id, 3600);
                $ret['sdkAppID'] = $config['IM_SDKAPPID'];
                $ret['accType'] = $config['IM_ACCOUNTTYPE'];
                $ret['userSig'] = $sign;// 签名
            } catch (Exception $e) {
            }

            return $ret;
        }
    }